package com.its.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.its.pojo.BusClaimReport;
import com.its.mapper.BusClaimReportMapper;
import com.its.service.BusClaimReportService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.its.web.param.BusClaimReportControllerListParam;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 * 报案表 服务实现类
 * </p>
 *
 * @author 朱厚强
 * @since 2023年12月23日
 */
@Service
public class BusClaimReportServiceImpl extends ServiceImpl<BusClaimReportMapper, BusClaimReport> implements BusClaimReportService {
    @Autowired
    private BusClaimReportMapper mapper;

    @Override
    public PageInfo<BusClaimReport> selectList(BusClaimReportControllerListParam param) {
        // 前端传入时是LocalDate，没有时分秒，所以这里需要加入时分秒
        if (param.getStart()!=null && param.getEnd() != null){
            param.setStart(param.getStart()+" 00:00:00"); // 这里有空格是为了和日期相隔
            param.setEnd(param.getEnd()+" 23:59:59");
        }

        // 开始分页
        PageHelper.startPage(param.getPageNum(),param.getPageSize());
        // 用lambda 表达式的方式生成
        LambdaQueryWrapper<BusClaimReport> queryWrapper = new LambdaQueryWrapper<>();
        // 报案编号 需要数据库中的字段与实体类的属性进行相匹配
        if (StringUtils.isNotBlank(param.getClaimReportId())){
            queryWrapper.eq(BusClaimReport::getClaimReportId,param.getClaimReportId());
        }
        // 保单编号 需要数据库中的字段与实体类的属性进行相匹配
        if (StringUtils.isNotBlank(param.getPolicyNumber())){
            queryWrapper.eq(BusClaimReport::getPolicyNumber,param.getPolicyNumber());
        }
        // 报案联系人 需要数据库中的字段与实体类的属性进行相匹配
        if (StringUtils.isNotBlank(param.getContactPerson())){
            queryWrapper.eq(BusClaimReport::getContactPerson,param.getContactPerson());
        }

        // 报案人联系电话 需要数据库中的字段与实体类的属性进行相匹配
        if (StringUtils.isNotBlank(param.getContactPhone())){
            queryWrapper.eq(BusClaimReport::getContactPhone,param.getContactPhone());
        }

        // 报案时间
        if (StringUtils.isNotBlank(param.getStart()) && StringUtils.isNotBlank(param.getEnd())){
                // 报案的 起始与结束时间都在 查询范围
            queryWrapper.between(BusClaimReport::getReportTime,param.getStart(),param.getEnd());
        }
        if (StringUtils.isNotBlank(param.getStart()) && StringUtils.isBlank(param.getEnd())){
            // 报案的 只有起始时间在 查询范围
            queryWrapper.ge(BusClaimReport::getReportTime,param.getStart());
        }
        if (StringUtils.isBlank(param.getStart()) && StringUtils.isNotBlank(param.getEnd())){
            // 报案的 只有结案时间在 查询范围
            queryWrapper.le(BusClaimReport::getReportTime,param.getEnd());
        }
        // 只查询状态正常的
        queryWrapper.eq(BusClaimReport::getState,1);
        // 排序 根据报案时间进行排序
        queryWrapper.orderByDesc(BusClaimReport::getReportTime);
        List<BusClaimReport> busClaimReports = mapper.selectList(queryWrapper);
        return new PageInfo<>(busClaimReports);
    }

    @Override
    public PageInfo<BusClaimReport> selectListPro(BusClaimReportControllerListParam param) {
        // 前端传入时是LocalDate，没有时分秒，所以这里需要加入时分秒
        if (param.getStart()!=null && param.getEnd() != null){
            param.setStart(param.getStart()+" 00:00:00"); // 这里有空格是为了和日期相隔
            param.setEnd(param.getEnd()+" 23:59:59");
        }

        // 开始分页
        PageHelper.startPage(param.getPageNum(),param.getPageSize());
        // 用lambda 表达式的方式生成
        LambdaQueryWrapper<BusClaimReport> queryWrapper = new LambdaQueryWrapper<>();
        // 报案编号 需要数据库中的字段与实体类的属性进行相匹配
        if (StringUtils.isNotBlank(param.getClaimReportId())){
            queryWrapper.eq(BusClaimReport::getClaimReportId,param.getClaimReportId());
        }
        // 省
        if (param.getProvince() != null){
            queryWrapper.eq(BusClaimReport::getProvinceId,param.getProvince());
        }
        // 市
        if (param.getCity() != null){
            queryWrapper.eq(BusClaimReport::getCityId,param.getCity());
        }
        // 区
        if (param.getDistrict() != null){
            queryWrapper.eq(BusClaimReport::getDistrictId,param.getDistrict());
        }
        // 只查询状态正常的
        queryWrapper.eq(BusClaimReport::getState,1);
        // 只查询状态流程状态为0的 0 为未指派
        queryWrapper.eq(BusClaimReport::getFlowState,0);
        // 排序 根据报案时间进行排序
        queryWrapper.orderByDesc(BusClaimReport::getReportTime);
        List<BusClaimReport> busClaimReports = mapper.selectList(queryWrapper);
        return new PageInfo<>(busClaimReports);
    }
}
